//封装请求
// 'use strict'
import axios from 'axios';
import store from '@/store/index'
import common from '../../commonFunction/common'
// 时间戳
var CryptoJS = require("crypto-js");
const service = axios.create({
	baseURL:store.state.baseurl, // api 的 base_url本地
	timeout: 0, // 请求超时时间
})

// request请求拦截器
service.interceptors.request.use(
	config => {
		lookFile()
		common.showToast();
		// console.log(config,'request请求拦截器')
		return config
	},
	error => {
		console.log(error) // for debug
		Promise.reject(error)
	}
)

// response 响应拦截器
service.interceptors.response.use(
	response => {
		var data=response.data		
		return data		
	},
	error => {		
		return Promise.reject(error)
	}
)
service.defaults.adapter = function (config) {
	console.log(config)
	var dataRes={
		ts : new Date().getTime(),
		appcode:'appcode_test0000',
		rnd : randomn(6)
	}
	if(config.params!=undefined&&config.params!=null&&config.params!=''){
		Object.assign(dataRes, config.params);
	}
	if(config.data!=undefined&&config.data!=null&&config.data!=''){
		Object.assign(dataRes, JSON.parse(config.data));
	}
	dataRes=objKeySort(dataRes)
	var sigData=''
	for(var obj in dataRes){
		if(sigData==''){
			sigData+=config.url+'?'+obj+'='+dataRes[obj]
		}else{
			sigData+='&'+obj+'='+dataRes[obj]
		}
	}
	let sig=CryptoJS.HmacSHA1(sigData, "7B,x4_y1ss`Tc.miq.appkey").toString(CryptoJS.enc.Hex);
    return new Promise((resolve, reject) => {
        mpvue.request({
            url: store.state.baseurl+config.url,
            data: config.params,
            method:config.method,           
			header: {
				"uat":store.state.uat,
				'content-type': 'application/json;charset=UTF-8',
				'appcode':dataRes.appcode,
				'ts':dataRes.ts,
				'rnd':dataRes.rnd,
				'sig':sig
			},
            success:(res)=>{
				if(res.data.status===0){
					return resolve(res);
				}else{
					wx.showToast({
						title: res.data.message,
						icon: "none",
						duration: 1000
					});
					return resolve(res);
				}
            },
            fail:(res)=> {
				wx.showToast({
					title:'请求失败',
					icon: "none",
					duration: 1000
				});
              return reject(res);
            }
        })
    })
}
export default service

function randomn(n) {
	if (n > 21) return null
	var re =new RegExp("(\\d{" + n + "})(\\.|$)")
	var num = (Array(n-1).join(0) + Math.pow(10,n) * Math.random()).match(re)[1]
	return num
  }

  function objKeySort(obj) {//排序的函数
	var newkey = Object.keys(obj).sort(); //先用Object内置类的keys方法获取要排序对象的属性名，再利用Array原型上的sort方法对获取的属性名进行排序，newkey是一个数组
	var newObj = {};//创建一个新的对象，用于存放排好序的键值对
	for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
		newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
	}
	return newObj;//返回排好序的新对象
}
function  lookFile(){
    wx.getNetworkType({
      success: function (res) {
        if (res.networkType == 'none') {
              wx.showToast({
                title:'无法连接网络，请重新尝试'
              })
        }
      }
    })
  }